package com.guan.mysolutionstudy;

import org.junit.Test;

/**
 * @ClassName StringToInteger
 * @Author GuanCary
 * @Date 2020/5/13 18:03
 * @Version 1.0
 * #### 把字符串转换成整数
 * <p>
 * > 剑指offer:  将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，但是string不符合数字要求时返回0)，
 * 要求不能使用字符串转换整数的库函数。
 * 数值为0或者字符串不是一个合法的数值则返回0。
 **/
public class StringToInteger {
    public int solution(String str) {
        //我们不能直接用库函数,题目要求
        // return Integer.parseInt(str);
        //首先判断这个字符串有没有符号位+号和减号-
        char[] chars = str.toCharArray();
        //声明保存结果res
        int res = 0;
        //整数flag为1,负数为2,没有符号为0
        int flag = 0;
        if (chars[0] == '+') {
            flag = 1;
        }
        if (chars[0] == '-') {
            flag = 2;
        }
        //如果第一位是符号位的话,startNum就从1开始
        int startNum = flag > 0 ? 1 : 0;
        //存放临时数据
        int temp = 0;
        for (int i = startNum; i < chars.length; i++) {
            //如果为数字,就得到这个数字
            if (Character.isDigit(chars[i])) {
                temp = chars[i]-'0';
                //如果还有后边一位,那就把上次的结果乘于10,再加上临时数字,第一次res为0
                res = res * 10 + temp;
            }
            //不为数字直接返回0
            else {

                return 0;
            }
        }
        return res;
    }

    @Test
    public void test() {
        System.out.println(solution("123123412null"));
        System.out.println(solution("13242134"));
        System.out.println(solution("sdaf23"));
    }
}